//package org.sgx.dao.util;
//
//import java.io.IOException;
//import java.sql.Connection;
//import java.sql.DatabaseMetaData;
//import java.sql.DriverManager;
//import java.sql.PreparedStatement;
//import java.sql.ResultSet;
//import java.sql.ResultSetMetaData;
//import java.sql.SQLException;
//import java.sql.Statement;
//import java.sql.Timestamp;
//import java.util.Calendar;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.Iterator;
//import java.util.LinkedList;
//import java.util.List;
//import java.util.Map;
//import java.util.Properties;
//
//import org.sgx.dao.ConnectionManager;
//import org.sgx.dao.DaoException;
//import org.sgx.dao.util.OrderedMap;
//
////import com.liferay.portal.kernel.dao.jdbc.DataAccess;
///**
// * sqt related utilities
// * @author sgurin
// *
// */
//public class CopyOfSQLUtil {
//
//	/* *** sql *** */	
//
//	public static final String TABLE_NAME_PREFIX = "bee_events_", 
//		TEMPLATE_TABLE_NAME = TABLE_NAME_PREFIX+"Template";
//	
//	
//	public interface SQLObjectBuilder<T> {
//		T buildObjectFrom(ResultSet rs) throws Exception;
//	}
//	private static SQLObjectBuilder<Map> SQLMapBuilder = new SQLObjectBuilder<Map>() {
//
//		public Map buildObjectFrom(ResultSet rs) throws Exception {
//			HashMap m = new HashMap();
//			ResultSetMetaData meta = rs.getMetaData();
//			for(int i=0; i<meta.getColumnCount(); i++) {
//				m.put(meta.getColumnName(i+1), rs.getObject(i+1));
//			}
//			return m;
//		}
//		
//	};
//	
//	
//	public Timestamp getSqlTimestamp(Date d) {
//		return new java.sql.Timestamp(d.getTime());
//	}
//
//	public java.sql.Date getSqlDate(Date d) {
//		return new java.sql.Date(d.getTime());
//	}
//	
//	
//	
//	/**
//	 * example: sqlUpate("INSERT employee VALUES("+13+","+"'Aman'"+")")
//	 * @param query
//	 * @throws SQLException
//	 */
//	public int sqlUpate(String query) throws DaoException {
//		try {
//		Connection con = sqlConnection();
//		Statement st = con.createStatement();
//        int ret = st.executeUpdate(query);
//        st.close();
//        con.close();
//        return ret;
//		} catch(Exception e) {
//			throw new DaoException(e);
//		}
//	}
//	
//	
////	/**
////	 * example: sqlQuery("SELECT * FROM  employee6")
////	 * @param query
////	 * @return
////	 * @throws SQLException
////	 */
////	public ResultSet sqlQuery(String query) throws SQLException {
////		Statement st = sqlConnection().createStatement();
////        ResultSet res = st.executeQuery(query);
////        return res;
////	}
//
////	public ResultSet sqlQueryInDateInterval(String table, String dateColumn, Date d1, Date d2) throws SQLException {
////		String query = "SELECT * FROM "+table+" WHERE "+dateColumn+" > ? AND "+dateColumn+" < ? ORDER BY "+dateColumn+" DESC";
////		PreparedStatement ps = sqlConnection().prepareStatement(query);
////		ps.setDate(1, getSqlDate(d1));
////		ps.setDate(2, getSqlDate(d2));
////		return ps.executeQuery();
////	}
//	public Object sqlQueryOne(String tableName, String columnName, 
//			String quotedValue, SQLObjectBuilder builder) throws Exception {	
//		
//		Connection con = sqlConnection();
//		Statement st = con.createStatement();
//		ResultSet rset = st.executeQuery("SELECT * FROM " + tableName + " WHERE " + columnName + "=" + quotedValue);
//		
////		ResultSet rset = sqlQuery(
////			"SELECT * FROM " + tableName + " WHERE " + columnName + "=" + quotedValue);
//		
//		while (rset.next()) {
//			Object o = builder.buildObjectFrom(rset);
//			st.close();
//			con.close();
//			return o;
//		}
//		st.close();
//		con.close();
//		return null;
//	}
//
//	public static <T> List<T> sqlQueryAll(String tableName, SQLObjectBuilder<T> builder) throws Exception {
//		Connection con = sqlConnection();
//		Statement st = con.createStatement();
//		ResultSet rset = st.executeQuery("SELECT * FROM " + tableName);
//		
//		List<T> l = new LinkedList<T>();
//		while (rset.next()) {
//			l.add(builder.buildObjectFrom(rset));
//		}
//		st.close();
//		con.close();
//		return l;
//	}
//		
//	public static Connection sqlConnection() throws DaoException {
//		return ConnectionManager.getInstance().getConnectionGiver().getConnection();//DataAccess.getConnection();
//	}
//	public static boolean insert(Map<String,String> fields, String tableName) throws DaoException  {
//		try {
//		Connection conn = sqlConnection();
//		String st = "insert into "+tableName.toLowerCase()+"(", 
//			stend = ") values (";
//		
//		Iterator<String> fi = fields.keySet().iterator();
//		while(fi.hasNext()) {
//			String f = fi.next();
//			st+=f;
//			stend+="?";
//			if(fi.hasNext()) {
//				st+=",";
//				stend+=",";
//			}
//		}
//		st+=stend+")";
//		PreparedStatement pst = conn.prepareStatement(st);
//		int i=1;
//		fi = fields.keySet().iterator();
//		while(fi.hasNext()) {
//			pst.setString(i, fields.get(fi.next()));
//			i++;
//		}
//		boolean ret = pst.execute();
//		pst.close();
//		conn.close();
//		return ret;
//		} catch(Exception e) {
//			throw new DaoException(e);
//		}
//	}
//	
//	
//	
//	/* sql test and debug tools */
//	public String dump(ResultSet res) throws SQLException {
//		ResultSetMetaData md = res.getMetaData();
//		StringBuilder sb = new StringBuilder();
//		while (res.next()) {
//			int ccount = md.getColumnCount();
//			for (int i = 0; i < md.getColumnCount(); i++) {
//				sb.append(res.getObject(i+1) + "\t\t");
//			}
//			sb.append("\n");
//		}
//		return sb.toString();
//	}		
//	
//	
//	
///* *** dates utilities *** */
//	public enum IntervalType {  Month, Week  }
//	/**
//	 * @param intervalType can be today, week, month
//	 * @return two dates that are a time interval 
//	 */
//	public static Date[] getDateInterval(String intervalType) {
//		IntervalType t = null;
//		if(intervalType.toLowerCase().equals("today")) {
//			Calendar c = Calendar.getInstance();
//			c.setTime(new Date());
//			
//			c.set(Calendar.HOUR_OF_DAY, 0);
//			c.set(Calendar.MINUTE, 0);
//			c.set(Calendar.SECOND, 1);
//			Date d1 = c.getTime();
//			
//			c.set(Calendar.HOUR_OF_DAY, 23);
//			c.set(Calendar.MINUTE, 59);
//			c.set(Calendar.SECOND, 59);
//			Date d2 = c.getTime();
//			
//			return new Date[]{d1, d2};
//		}
//		else if(intervalType.toLowerCase().equals("month"))
//			t=IntervalType.Month;
//		else if(intervalType.toLowerCase().equals("week"))
//			t=IntervalType.Week;
//		Calendar[]cals = getDateIntervals(t, null);
//		return new Date[]{cals[0].getTime(), cals[1].getTime()};
//	}
//	
//	/** taken from http://www.rgagnon.com/javadetails/java-0611.html */
//	public static Calendar[] getDateIntervals(IntervalType type,
//			Calendar reference) {
//		if (reference == null) {
//			reference = Calendar.getInstance();
//		}
//		Calendar startDate = (Calendar) reference.clone();
//		Calendar endDate = (Calendar) reference.clone();
//
//		if (type == IntervalType.Month) {
//			startDate.set(Calendar.DATE, 1);
//			endDate.add(Calendar.MONTH, 1);
//			startDate.set(Calendar.DATE, 1);
//			endDate.add(Calendar.DATE, -1);
//		} else {
//			int dayOfWeek = startDate.get(Calendar.DAY_OF_WEEK);
//			while (dayOfWeek != Calendar.SUNDAY) {
//				startDate.add(Calendar.DATE, -1);
//				dayOfWeek = startDate.get(Calendar.DAY_OF_WEEK);
//			}
//			while (dayOfWeek != Calendar.MONDAY) {
//				startDate.add(Calendar.DATE, -1);
//				dayOfWeek = startDate.get(Calendar.DAY_OF_WEEK);
//			}
//
//			dayOfWeek = endDate.get(Calendar.DAY_OF_WEEK);
//			while (dayOfWeek != Calendar.SUNDAY) {
//				endDate.add(Calendar.DATE, -1);
//				dayOfWeek = endDate.get(Calendar.DAY_OF_WEEK);
//			}
//		}
//		return new Calendar[] { startDate, endDate };
//	}
//	
//	public static boolean tableExists(String tableName) throws DaoException {
//		try {
//		Connection con = sqlConnection();
//		DatabaseMetaData dbm = con.getMetaData();
//		ResultSet rs = dbm.getTables(null, null, tableName, null);		
//		boolean ret = false;
//		if (rs.next()) {
//			return true;
//		}
//		rs.close();
//		con.close();
//		return ret;
//		} catch(Exception e) {
//			throw new DaoException(e);
//		}
//	}
//	
//	/* ** table creation ** */
//	
//	public static void createTable(String tableName, OrderedMap<String, String> tableCols) 
//	throws DaoException {
//		try {
//		Connection con = sqlConnection();
//		
//		String s;
//		s = "create table "+tableName+" (";
//		
//		Iterator<String> it = tableCols.getOrderedKeys().iterator();
//		
//		for(String cname = it.next(); it.hasNext(); cname = it.next()) {
//			s += cname + " " + tableCols.get(cname);
//			if(it.hasNext())
//				s += ", ";
//		}
//		
//		Statement stmt = con.createStatement();
//   		stmt.executeUpdate(s);
//		stmt.close();
//		con.close();
//		} catch(Exception e) {
//			throw new DaoException(e);
//		}
//	}
//	public static void createTemplateTable() throws DaoException {
//		createTable(TEMPLATE_TABLE_NAME, Util.<String>toOrderedMap(
//			"id", "BIGINT(20)", 
//			"txt", "LONGTEXT"
//		));
//	}
//	
//	public static void createCKEventsTable() throws DaoException {
//		createTable(TEMPLATE_TABLE_NAME, Util.<String>toOrderedMap(
//			"id", "BIGINT(20)", 
//			"datetime", "TIMESTAMP",
//			"name", "VARCHAR(128)"
//		));
//	}
//}
